home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / as2db1 / argv.bas < prev    next >
BASIC Source File  |  1993-09-05  |  3KB  |  118 lines

  1. '   ARGV.BAS
  2. '
  3. '   - Improves VB access to command line options
  4. '   - Accomodates different command line "styles"
  5. '   - Similar to argc, argv in C language, with parsing
  6. '   - No restrictions, use freely
  7. '
  8. '      COST:
  9. '            - add ARGV.BAS to your project
  10. '            - call "argvInit" before using the cmd line args
  11. '
  12. '      BENEFIT:
  13. '            - makes available two globals:
  14. '               "argc" (count of command line arguments = n)
  15. '               "argv" (subscript 1..n) array of cmd line args
  16. '
  17. '   Sample command line arguments:
  18. '
  19. '    /col=blue /height=100   c:\test\fu.bar    [vms style]
  20. '     col=blue  height=100   c:\test\fu.bar    [risky style]
  21. '    -cblue    -h100         c:\test\fu.bar    [unix style]
  22. '
  23. '   Returned in argv:
  24. '     The same values are returned regardless of cmd line style
  25. '       (Unix .Option fields contain only 1 character)
  26. '
  27. '       argv(1).Option = col
  28. '       argv(1).Value  = blue
  29. '       argv(2).Option = height
  30. '       argv(2).Value  = 100
  31. '       argv(3).Option =
  32. '       argv(3).Value  = c:\test\fu.bar
  33. '   argc = 3
  34. '
  35. '
  36.       
  37. Option Explicit
  38. Type anArg
  39.     Option As Variant
  40.     Value As Variant
  41. End Type
  42.  
  43. Global argv() As anArg
  44. Global argc
  45.  
  46. Sub argvInit ()
  47.     Dim tCommand
  48.     Dim tArg
  49.     Dim marker As Integer
  50.     argc = 0
  51.     tCommand = Trim(Command)
  52.     If Len(Command) = 0 Then Exit Sub
  53.     stuffNCount (tCommand)
  54.     
  55.     'Debug
  56.     'Dim looper As Integer
  57.     'Dim msg As String
  58.     'Dim eol As String
  59.     'eol = Chr$(10) & Chr$(13)
  60.     'msg = "argc = " & argc & eol
  61.     'If argc > 0 Then
  62.     '   msg = msg & "Ubound of argv = " & UBound(argv) & eol
  63.     '   For looper = 1 To argc
  64.     '       msg = msg & "argv " & looper & " option: " & argv(looper).Option & eol
  65.     '       msg = msg & "argv " & looper & " value : " & argv(looper).Value & eol
  66.     '   Next looper
  67.     'End If
  68.     'MsgBox msg
  69. End Sub
  70.  
  71. Private Sub stuffNCount (tCommand)
  72.     Dim wArg   'working argument holder
  73.     Dim marker As Long
  74.     Dim remCommand  'working remainder of commandline
  75.     remCommand = tCommand & " "  ' add space for end marker
  76.     Do
  77.     marker = InStr(remCommand, " ")
  78.     If marker <= 1 Then Exit Do
  79.     wArg = Trim(Mid(remCommand, 1, marker))
  80.     remCommand = LTrim(Mid(remCommand, marker + 1, Len(remCommand)))
  81.     argc = argc + 1
  82.     stuffOne (wArg)
  83.     Loop
  84. End Sub
  85.  
  86. Private Sub stuffOne (wArg)
  87.     'chk: argc was incremented just before calling me
  88.     
  89.     Dim marker As Integer
  90.     Dim switchChar As Integer
  91.     ReDim Preserve argv(1 To argc)
  92.     
  93.     If Left(wArg, 1) = "-" Then                 'Unix style switch
  94.     argv(argc).Option = Mid(wArg, 2, 1)
  95.     argv(argc).Value = Mid(wArg, 3)
  96.     Exit Sub
  97.     End If
  98.     
  99.     switchChar = 0
  100.     If Left(wArg, 1) = "/" Then switchChar = 1  'Dos/vms style switch
  101.     marker = InStr(wArg, "=")
  102.     If marker = 0 Then
  103.     If switchChar Then
  104.         argv(argc).Option = Mid(wArg, 2)
  105.         argv(argc).Value = ""
  106.     Else
  107.         argv(argc).Option = ""
  108.         argv(argc).Value = Mid(wArg, 1)
  109.     Exit Sub
  110.     End If
  111.     Else
  112.     argv(argc).Option = Mid(wArg, 1 + switchChar, marker - (1 + switchChar))
  113.     argv(argc).Value = Mid(wArg, marker + 1, Len(wArg))
  114.     Exit Sub
  115.     End If
  116. End Sub
  117.  
  118.